#!/bin/bash

# 智能部署脚本 - 自动检测Docker或使用传统Java部署
# 使用方法: ./deploy-docker.sh [服务器IP] [用户名]

SERVER_IP=${1:-14.103.180.56}
USERNAME=${2:-root}
APP_NAME="warp-knitting-monitor"
REMOTE_DIR="/opt/$APP_NAME"

echo "开始智能部署应用到服务器: $SERVER_IP"
echo "=========================================="

# 1. 递增版本号并构建应用
echo "1. 递增版本号并构建应用..."
./version.sh
./mvnw clean package -DskipTests
if [ $? -ne 0 ]; then
    echo "构建失败，退出部署"
    exit 1
fi

# 2. 创建部署包
echo "2. 创建部署包..."
DEPLOY_DIR="deploy-docker"
rm -rf $DEPLOY_DIR
mkdir -p $DEPLOY_DIR

# 复制必要文件
cp -r src $DEPLOY_DIR/
cp pom.xml $DEPLOY_DIR/
cp mvnw $DEPLOY_DIR/
cp -r .mvn $DEPLOY_DIR/
cp target/demo-0.0.1-SNAPSHOT.jar $DEPLOY_DIR/
cp Dockerfile $DEPLOY_DIR/
cp docker-compose.yml $DEPLOY_DIR/

# 3. 上传到服务器
echo "3. 上传文件到服务器..."
ssh $USERNAME@$SERVER_IP "mkdir -p $REMOTE_DIR"
scp -r $DEPLOY_DIR/* $USERNAME@$SERVER_IP:$REMOTE_DIR/

# 4. 在服务器上部署应用
echo "4. 在服务器上部署应用..."
ssh $USERNAME@$SERVER_IP << EOF
    cd $REMOTE_DIR
    
    # 检查是否有Docker
    if command -v docker &> /dev/null; then
        echo "检测到Docker，使用Docker部署..."
        
        # 停止现有容器
        echo "停止现有容器..."
        docker-compose down 2>/dev/null || true
        docker stop $APP_NAME 2>/dev/null || true
        docker rm $APP_NAME 2>/dev/null || true
        
        # 构建镜像
        echo "构建Docker镜像..."
        docker build -t $APP_NAME .
        
        # 启动容器
        echo "启动Docker容器..."
        docker-compose up -d
        
        # 等待应用启动
        echo "等待应用启动..."
        sleep 15
        
        # 检查应用状态
        if curl -s http://localhost:8081/actuator/health > /dev/null; then
            echo "Docker应用启动成功！"
            echo "访问地址: http://$SERVER_IP:8081"
        else
            echo "Docker应用启动失败，请检查日志"
            docker logs $APP_NAME --tail 20
        fi
    else
        echo "未检测到Docker，使用传统Java部署..."
        
        # 停止现有应用
        echo "停止现有应用..."
        pkill -f demo-0.0.1-SNAPSHOT.jar 2>/dev/null || true
        
        # 检查端口占用
        if lsof -ti:8081 > /dev/null 2>&1; then
            echo "端口8081被占用，正在停止..."
            lsof -ti:8081 | xargs kill -9 2>/dev/null || true
        fi
        
        # 启动应用
        echo "启动应用..."
        nohup java -Xms512m -Xmx1024m -XX:+UseG1GC \\
             -jar demo-0.0.1-SNAPSHOT.jar \\
             --spring.profiles.active=prod \\
             --server.port=8081 > app.log 2>&1 &
        
        echo \$! > app.pid
        echo "应用已启动，PID: \$(cat app.pid)"
        
        # 等待应用启动
        echo "等待应用启动..."
        sleep 10
        
        # 检查应用状态
        if curl -s http://localhost:8081/api/monitor/machines > /dev/null; then
            echo "Java应用启动成功！"
            echo "访问地址: http://$SERVER_IP:8081"
        else
            echo "Java应用启动失败，请检查日志"
            tail -20 app.log
        fi
    fi
EOF

# 5. 清理本地文件
echo "5. 清理本地文件..."
rm -rf $DEPLOY_DIR

echo "智能部署完成！"
echo "应用访问地址: http://$SERVER_IP:8081"
echo "查看应用日志: ssh $USERNAME@$SERVER_IP 'tail -f $REMOTE_DIR/app.log'"
echo "查看应用状态: ssh $USERNAME@$SERVER_IP 'ps aux | grep demo-0.0.1-SNAPSHOT.jar'" 